﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HomePortal.Models
{
    public class Post
    {
        [Key]
        public int ID { get; set; }
        [Required(ErrorMessage = "Заполните заголовок.")]
        public string Title { get; set; }
        [Required(ErrorMessage = "Заполните миниконтент.")]
        public string MiniContent { get; set; }
        [Required(ErrorMessage = "Заполните автора.")]
        public string Author { get; set; }
        public DateTime PublishDate { get; set; }
        public int Rating { get; set; }
        public string PageContent { get; set; }
        [AllowHtml]
        public string MainContent { get; set; }
        public int TagID { get; set; }    
        public virtual ICollection<Comment> Comments { get; set; }
        public virtual ICollection<Tag> Tags { get; set; }
        public bool Visible{get;set;}
        public string DownloadFileName { get; set; }
    }

    public class News
    {
        [Key]
        public int ID { get; set; }
        [Required(ErrorMessage = "Заполните заголовок.")]
        public string Title { get; set; }
        public string LinkNews { get; set; }
        [Required(ErrorMessage = "Заполните миниконтент.")]
        [DataType(DataType.MultilineText)]
        public string MiniContent { get; set; }
        [Required(ErrorMessage = "Заполните автора.")]
        public string Author { get; set; }
        public DateTime PublishDate { get; set; }
        [AllowHtml]
        public string MainContent { get; set; }
        public virtual ICollection<NewsComment> Comments { get; set; }
        public bool Visible { get; set; }
        public byte[] ImageData { get; set; }
        [HiddenInput(DisplayValue = false)]
        public string ImageMimeType { get; set; }
    }

    

    public class Tag
    {
        public int TagID { get; set; }
        [Required(ErrorMessage = "Заполните название тега.")]   
        public string Name { get; set; }
        public virtual ICollection<Post> Posts { get; set; }
    }

    public class Comment
    {
        [Key]
        public int CommentID { get; set;}       
        public int PostID { get; set; }
        [Required(ErrorMessage = "Заполните имя пользователя.")]        
        public string UserName { get; set; }
        [Required(ErrorMessage = "Заполните поле текст комментария.")]
        [StringLength(4000, MinimumLength = 3, ErrorMessage =
            "Текст комментария должен быть более 3 символов")]
        public string CommentText { get; set; }
        public int Rating { get; set; }
        public DateTime CommentDate { get; set; }
    }

    public class NewsComment
    {
        [Key]
        public int CommentID { get; set; }
        public int PostID { get; set; }
        public int NewsID { get; set; }
        [Required(ErrorMessage = "Заполните имя пользователя.")]
        public string UserName { get; set; }
        [Required(ErrorMessage = "Заполните поле текст комментария.")]
        [StringLength(4000, MinimumLength = 3, ErrorMessage =
            "Текст комментария должен быть более 3 символов")]
        public string CommentText { get; set; }
        public int Rating { get; set; }
        public DateTime CommentDate { get; set; }
    }

    public class Photo
    {
        [Key]
        public int ID { get; set; }
        [Required(ErrorMessage = "Заполните заголовок.")]
        public string Title { get; set; }
        [Required(ErrorMessage = "Заполните автора.")]
        public string Author { get; set; }
        public DateTime PublishDate { get; set; }
        public bool Visible { get; set; }
        public byte[] ImageMini { get; set; }
        [HiddenInput(DisplayValue = false)]
        public string ImageMiniMimeType { get; set; }
        public byte[] ImageData { get; set; }
        [HiddenInput(DisplayValue = false)]
        public string ImageMimeType { get; set; }
        public virtual ICollection<PhotoComment> Comments { get; set; }
        public int TagID { get; set; }
        public virtual ICollection<TagPhoto> Tags { get; set; }
    }

    public class PhotoComment
    {
        [Key]
        public int CommentID { get; set; }
        public int PostID { get; set; }
        public int PhotoID { get; set; }
        [Required(ErrorMessage = "Заполните имя пользователя.")]
        public string UserName { get; set; }
        [Required(ErrorMessage = "Заполните поле текст комментария.")]
        [StringLength(4000, MinimumLength = 3, ErrorMessage =
            "Текст комментария должен быть более 3 символов")]
        public string CommentText { get; set; }
        public int Rating { get; set; }
        public DateTime CommentDate { get; set; }
    }

    public class TagPhoto
    {
        [Key]
        public int TagID { get; set; }
        [Required(ErrorMessage = "Заполните название тега.")]
        public string Name { get; set; }
        public virtual ICollection<Photo> Photos { get; set; }
    }
}